package com.weijian.service;

import com.weijian.common.ApiResponse;
import com.weijian.dal.entity.User;
import com.weijian.dal.dto.user.UserLoginRequest;
import com.weijian.dal.dto.user.UserRegisterRequest;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;


/**
 * 用户服务接口
 *
 * @author weijian
 * @since 2024-12-20
 */
public interface UserService {

    /**
     * 用户注册
     *
     * @param registerRequest 注册请求
     * @return 注册结果
     */
    ApiResponse<User> register(UserRegisterRequest registerRequest);

    /**
     * 用户登录
     *
     * @param loginRequest 登录请求
     * @param response     HTTP响应
     * @return 登录结果
     */
    ApiResponse<User> login(UserLoginRequest loginRequest, HttpServletResponse response);

    /**
     * 用户登出
     *
     * @param request  HTTP请求
     * @param response HTTP响应
     * @return 登出结果
     */
    ApiResponse<Void> logout(HttpServletRequest request, HttpServletResponse response);

    /**
     * 获取当前登录用户信息
     *
     * @param request HTTP请求
     * @return 用户信息
     */
    ApiResponse<User> getCurrentUser(HttpServletRequest request);

    /**
     * 根据ID获取用户信息
     *
     * @param userId 用户ID
     * @return 用户信息
     */
    ApiResponse<User> getUserById(Long userId);

    /**
     * 检查用户是否已登录
     *
     * @param request HTTP请求
     * @return 登录状态
     */
    boolean isLoggedIn(HttpServletRequest request);

    /**
     * 注销用户账号（永久删除）
     *
     * @param password 用户密码验证
     * @param request  HTTP请求
     * @return 注销结果
     */
    ApiResponse<Void> deleteAccount(String password, HttpServletRequest request);
}